﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
using System.Text;
using System.Threading.Tasks;

namespace Lesson22_面向对象编程_万物之物方法
{
    class Text
    {
        public int i = 1;  //堆类型
        public Text2 t2 = new Text2();  
        public Text Clone()
        {
            return MemberwiseClone() as Text;  //返回自己的克隆体，转化成Text类型，最后返回出去
        }
        public override  string ToString ()
        {
            return "声明的Text类";
        }
    }
    class Text2
    {
        public int i = 2;

    }
    internal class Program
    {
        static void Main(string[] args)
        {
            #region 知识点一 object中的静态方法
            //静态方法 Equals 判断连哥哥对象是否相等
            //值类型
            //Console.WriteLine(Object.Equals(1, 1));  //打印结果为True
            ////引用类型 
            //Text t1 = new Text();   
            //Text t2 = new Text();
            //Console.WriteLine(object.Equals(t1,t2));  //打印结果为False  看的是是否指向同一个地址

            //Text t3 = t1;
            //Console.WriteLine(object.Equals(t3, t1));  //打印结果为True

            #endregion

            #region object中的成员方法 
            //普通方法 MemberwiseClone
            //该方法用于获取对象的浅拷贝对象，口语化的意思就是会返回一个新的对象
            //但是新对象中的引用变量会和老对象中一致

            //Text t = new Text();

            //Text t2  =  t.Clone();
            //Console.WriteLine("克隆对象后");
            //Console.WriteLine("t.i = " + t.i);
            //Console.WriteLine("t.i = " + t.i);
            //Console.WriteLine("t2.i = " + t2.i);
            //Console.WriteLine("t.t2.i = " + t.t2.i);
            //Console.WriteLine("t2.t2.i = " + t2.t2.i);


            //Console.WriteLine("改变克隆体后打印出来的");
            //t2.i = 20;
            //t2.t2.i = 21;
            //Console.WriteLine("t.i = " + t.i);
            //Console.WriteLine("t.i = " + t.i);
            //Console.WriteLine("t2.i = " + t2.i);
            //Console.WriteLine("t.t2.i = " + t.t2.i);
            //Console.WriteLine("t2.t2.i = " + t2.t2.i);
            #endregion

            #region  object 中的虚方法 
            Text t = new Text();

            Console.WriteLine(t);
            #endregion 
        }
    }
}
//总结相对重要知识点 
//1：成员方法 GetType 反射相关   
//2成员方法:MemberwiseClone()浅拷贝返回一个新的对象
// 3：虚方法 toString 自定字符串转换规则
//4：虚方法Equal自定义判断相等的规则